#ifndef __ZHANG_POSE_EST_HPP__
#define __ZHANG_POSE_EST_HPP__

#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/features2d/features2d.hpp"
//#include "opencv2/nonfree/features2d.hpp"     // SURF & SIFT headers have been moved here!!!!
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/imgproc/imgproc_c.h"

#include <iostream>
#include <vector>
#include <stdio.h>

//#include "global.h"

#include "MatWork.hpp"


class ZhangPoseEstimator {

private:

	cv::Mat CamMat;
	cv::Mat distCoeffsMat;
	bool useExtrinsicGuess;

	void CvMatShow(const CvMat* mat);

public:

	ZhangPoseEstimator(const cv::Mat A, const cv::Mat distCoeffsMat, bool useExtrinsicGuess);


	ZhangPoseEstimator();


	~ZhangPoseEstimator();

	// Interfacing function -> change this interface
	// create a class to store camera matrix -> class data
	void Estimate(const cv::Mat objectPointsMat, const cv::Mat imagePointsMat,
		cv::Mat& rvecMat, cv::Mat& tvecMat);

};

#endif  // __ZHANG_POSE_EST_HPP__